using System;

namespace SharpMud.MudLib.SAMPLE.Environment.BuiltIn
{
	/// <summary>
	/// Defines the only hardcoded area, Limbo. Used for administrative purposes.
	/// </summary>
	public class Limbo
	{
		private Limbo()
		{

		}

		public static Area Create()
		{
			Area a = new Area();
			
			a.Name = "Limbo";
			a.Author = "None";
			
			Room thevoid = TheVoid.Create();
			Room hell = Hell.Create();

			a.Rooms = new Room[] {hell,thevoid};

			return a;
		}

		public class TheVoid
		{
			public const int Vnum = 0;

			private TheVoid()
			{
			}

			public static Room Create()
			{
				Room r = new Room();

				r.ShortDescription = "The Void";
				r.LongDescription = "You are in a vast emptiness, simply floating here. You have" + System.Environment.NewLine
					+ "no sense of direction, no sense of depth perception, and no" + System.Environment.NewLine
					+ "sense of time. You hope you will be able to leave soon."     + System.Environment.NewLine;
				r.RoomID = new RoomID(TheVoid.Vnum,r);
				r.AllowViolence = false;

				SimpleDirectionalExit exit_Void_to_Hell = new SimpleDirectionalExit();
				exit_Void_to_Hell.TargetRoom = new RoomID(Hell.Vnum);
				exit_Void_to_Hell.Direction = ExitDirection.North;
				exit_Void_to_Hell.IsObtrusive = false;
				exit_Void_to_Hell.IsObvious = true;
				r.ExitCollection.Add(exit_Void_to_Hell);

				return r;
			}
		}

		public class Hell
		{
			public const int Vnum = 6;

			private Hell()
			{
			}

			public static Room Create()
			{
				Room r = new Room();
				r.ShortDescription = "Hell";
				r.LongDescription = "You are in Hell. You never thought it would come to this," + System.Environment.NewLine
					+ "but it has. The flames whip at your body, causing horrendous" + System.Environment.NewLine
					+ "pain, but no damage. When will the torture end?"     + System.Environment.NewLine;
				r.RoomID = new RoomID(6,r);
				r.AllowViolence = false;

				SimpleDirectionalExit exit_Hell_to_Void = new SimpleDirectionalExit();
				exit_Hell_to_Void.TargetRoom = new RoomID(TheVoid.Vnum);
				exit_Hell_to_Void.Direction = ExitDirection.South;
				exit_Hell_to_Void.IsObtrusive = false;
				exit_Hell_to_Void.IsObvious = true;
				r.ExitCollection.Add(exit_Hell_to_Void);

				return r;
			}
		}
	}
}